package com.apanal.qlife.sys.service;

import java.util.List;

import com.apanal.qlife.common.aop.UserCacheAspect;
import com.apanal.qlife.common.page.Page;
import com.apanal.qlife.common.page.PageReturn;
import com.apanal.qlife.sys.model.User;

/**
 * 用户服务层接口<br>
 * 缓存实现:{@link UserCacheAspect}
 * 
 * @author shuliangxing
 * 
 * @date 2015-1-14上午11:34:36
 */
public interface UserService {

	/**
	 * 根据id硬删除,已实现缓存相应功能
	 * 
	 * @param useId
	 * @return
	 */
	String deleteById(Long useId);

	/**
	 * 新增,已实现缓存相应功能
	 * 
	 * @param record
	 * @return
	 */
	String insert(User record);

	/**
	 * 根据非空字段新增,已实现缓存相应功能
	 * 
	 * @param record
	 * @return
	 */
	String insertSelective(User record);

	/**
	 * 根据id查询,已实现缓存相应功能
	 * 
	 * @param useId
	 * @return
	 */
	User selectById(Long useId);

	/**
	 * 根据id更新,已实现缓存相应功能
	 * 
	 * @param record
	 * @return
	 */
	String updateById(User record);

	/**
	 * 根据id和非空字段更新,已实现缓存相应功能
	 * 
	 * @param record
	 * @param request
	 * @return
	 */
	String updateByIdSelective(User record);

	// 分割线

	/**
	 * 查询所有用户
	 * 
	 * @return
	 */
	List<User> selectAll();

	/**
	 * 根据用户id查询用户和相关信息
	 * 
	 * @param record
	 * @return
	 */
	User selectRelationById(Long id);

	/**
	 * 分页查询用户后台用户
	 * 
	 * @param entity
	 * @param page
	 * @return
	 */
	PageReturn<User> selectRelationForPage(User entity, Page page);

	/**
	 * 软删除用户,已实现缓存相应功能
	 * 
	 * @param useId
	 *            用户id
	 * @param operationId
	 *            操作人员id
	 * @return
	 */
	String deleteSoft(Long useId, Long operationId);

	/**
	 * 修改密码,已实现缓存相应功能
	 * 
	 * @param userId
	 * @param newPassword
	 */
	String changePassword(Long userId, String newPassword);

	/**
	 * 根据用户名查找后台用户,已实现缓存相应功能
	 * 
	 * @param username
	 * @return
	 */
	public User findByUsername(String username);

	/**
	 * 根据手机查找后台用户,已实现缓存相应功能
	 * 
	 * @param mobile
	 * @return
	 */
	public User findByMobile(String mobile);

	/**
	 * 根据用户id查询用户名称,已实现缓存相应功能
	 * 
	 * @param id
	 * @return
	 */
	String selectUserNameById(Long id);

	/**
	 * 根据用户id查询用户真实姓名,已实现缓存相应功能
	 * 
	 * @param id
	 * @return
	 */
	String selectUserRealNameById(Long id);

	/**
	 * 获取当前登录用户,已实现缓存相应功能
	 * 
	 * @param id
	 * @return
	 */
	User getCurrentUser();

	/**
	 * 获取当前登录用户id,已实现缓存相应功能
	 * 
	 * @return
	 */
	Long getCurrentUserId();

	/**
	 * 根据群组id查询用户集合
	 * 
	 * @param groId
	 * @return
	 */
	List<User> selectByGroId(Long groId);

	/**
	 * 根据id字符串查询
	 * 
	 * @param ids
	 *            逗号分隔
	 * @return
	 */
	List<User> selectByIds(String ids);

	/**
	 * 解锁/锁定,已实现缓存相应功能
	 * 
	 * @param useId
	 *            用户id
	 * @param useLocked
	 *            当前锁定状态
	 * @param operationId
	 *            操作人员id
	 * @return
	 */
	String updateToLockOrUnLock(Long useId, Integer useLocked, Long operationId);

	/**
	 * 检查手机号码是否存在,修改时排除当前手机号码
	 * 
	 * @param useId
	 *            用户id,新增时传0
	 * @param mobile
	 *            手机号吗
	 * @return
	 */
	Boolean checkMobileExist(Long useId, String mobile);

	/**
	 * 重置密码,已实现缓存相应功能
	 * 
	 * @param useId
	 *            用户id
	 * @param operationId
	 *            操作人员id
	 * @return
	 */
	String resetPwd(Long useId, Long operationId);

	/**
	 * 检查旧密码是否相同,已实现缓存相应功能
	 * 
	 * @param useId
	 *            用户id
	 * @param password
	 *            密码
	 * @return 0:密码不一致 1:密码一致
	 */
	int checkPwdEqual(Long useId, String password);

	/**
	 * 根据验证码修改用户密码,已实现缓存相应功能
	 * 
	 * @param mobile
	 *            手机号码
	 * @param newPassword
	 *            密码
	 * @param code
	 *            验证码
	 * @param type
	 *            用户类型 1:app用户 2:管理后台用户 9:T-Linx用户
	 * @return
	 */
	String changePwdByCode(String mobile, String newPassword, String code,
			int type);

	/**
	 * 机构停用时,为该机构下直属且已登录的用户设置停用标注(仅机构停用时调用)
	 * 
	 * @param orgId
	 *            停用的机构id
	 */
	void setLoginUserOrgDisableFlag(Long orgId);
}
